package com.ahdy.service;

import com.ahdy.entity.MedicationPlan;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 用药计划服务接口
 */

@Service
public interface MedicationPlanService {

    /**
     * 添加用药计划
     *
     * @param plan 用药计划实体
     * @return 新增计划ID
     */
    Integer addMedicationPlan(MedicationPlan plan);

    /**
     * 更新用药计划
     *
     * @param plan 用药计划实体
     * @return 影响行数
     */
    int updateMedicationPlan(MedicationPlan plan);

    /**
     * 删除用药计划
     *
     * @param id 计划ID
     * @return 影响行数
     */
    int deleteMedicationPlan(Integer id);

    /**
     * 根据ID查询用药计划
     *
     * @param id 计划ID
     * @return 用药计划实体
     */
    MedicationPlan getMedicationPlanById(Integer id);

    /**
     * 根据用户ID查询用药计划列表
     *
     * @param userId 用户ID
     * @return 用药计划列表
     */
    List<MedicationPlan> getMedicationPlansByUserId(Integer userId);

    /**
     * 根据用户ID和服药时段查询用药计划列表
     *
     * @param userId 用户ID
     * @param timingType 服药时段
     * @return 用药计划列表
     */
    List<MedicationPlan> getMedicationPlansByUserIdAndTimingType(Integer userId, MedicationPlan.TimingType timingType);

    /**
     * 根据用户ID删除所有用药计划
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteMedicationPlansByUserId(Integer userId);

    /**
     * 获取用药计划详情（包含药物信息）
     *
     * @param userId 用户ID
     * @return 用药计划详情列表
     */
    List<Map<String, Object>> getMedicationPlanDetailsWithMedication(Integer userId);

    /**
     * 检查用药冲突
     *
     * @param userId 用户ID
     * @param timingType 服药时段
     * @param specificTime 具体时间
     * @return 冲突的用药计划列表
     */
    List<MedicationPlan> findConflictingPlans(Integer userId, MedicationPlan.TimingType timingType, String specificTime);
}
